#include <iostream>
#include <functional>

using std::cout;
using std::endl;
using std::function;
using std::bind;



// 将回调作为参数传递给另一个函数，被注册的函数在特定的时间会被执行
// 回调函数
double multiply(double a, double b){
    return a * b;
}

int mian()
{
    using namespace std::placeholders;
    // 注册回调函数
    function<double(double)> mul = bind(&multiply, _1, 3.14);

    // 执行回调函数
    cout << mul(666) << endl;
    return 0;
}


// 回调函数（Callback Function）是编程中的一个重要概念，特别是在事件驱动编程、异步编程和函数式编程中。
// 回调函数是一种通过参数传递给另一个函数的函数，这个“被传递”的函数可以在某个特定事件发生时或者某个条件满足时被调用。

// 回调函数
// 回调函数本质上是一个函数，但它不是立即执行的，而是等待某个时刻被另一个函数（通常称为调用者函数）调用。回调函数可以接收参数，也可以返回值。

// 注册回调函数
// 注册回调函数是指将回调函数传递给另一个函数（调用者函数），以便在特定事件或条件满足时调用它。这个传递的过程通常被称为“注册”或“订阅”。

// 注册回调函数的步骤：

// 定义回调函数：首先定义一个函数，这个函数就是你希望在未来某个时刻被调用的回调函数。
// 注册回调函数：将回调函数作为参数传递给另一个函数。这个“另一个函数”通常会维护一个回调函数的列表或队列。
// 执行回调函数
// 执行回调函数是指在某个特定事件或条件满足时，调用之前注册的回调函数。调用者函数负责在适当的时候调用这些回调函数。

// 执行回调函数的步骤：

// 触发事件或条件：某个事件（如用户点击按钮、数据加载完成等）发生或某个条件满足。
// 调用回调函数：调用者函数从它的回调函数列表或队列中取出之前注册的回调函数，并执行它。

